package com.twang.stock.feign;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Data
public class EbaySearchResponse {

    private Map<String, Object> modules;

    public List<Object> getAllListings() {
        return modules != null ? new ArrayList<>(modules.values()) : Collections.emptyList();
    }

//    // ========== 内部类定义 ==========
//    @Data
//    public static class ListingModule {
//        @JsonProperty("_type")
//        private String type; // "ITEM"
//        private Action action;
//        private String listingId;
//        private TextualDisplay title;
//        private Image image;
//        private TextualDisplayValue displayPrice;
//        private TextualDisplayValue additionalPrice;
//        private TextualDisplayValue quantity;
//        private TextualDisplayValue logisticsCost;
//        private ItemPropertyOrdering itemPropertyOrdering;
//        private ViewportTracking viewportTracking;
//        private String id;
//        private String presentityId;
//        @JsonProperty("__search")
//        private SearchMetadata search;
//        private TrackingInfo trackingInfo;
//        private Meta meta;
//    }
//
//    @Data
//    public static class Action {
//        @JsonProperty("_type")
//        private String type; // "Action"
//        private String name; // "VIEW_ITEM"
//        private Params params;
//        private List<Tracking> trackingList;
//        private String URL;
//    }
//
//    @Data
//    public static class Params {
//        private String listingId;
//        @JsonProperty("_skw")
//        private String skw;
//        private String hash;
//    }
//
//    @Data
//    public static class Tracking {
//        private String actionKind;
//        private List<String> actionKinds;
//        private String operationId;
//        private boolean flushImmediately;
//        private EventProperty eventProperty;
//        private String eventFamily;
//        private String eventAction;
//    }
//
//    @Data
//    public static class EventProperty {
//        private String sid;
//        private String trackableId;
//        private String parentrq;
//        private String pageci;
//        private String orgdata;
//        private String interaction;
//        private String moduledtl;
//        private String clickaction;
//        private String itm;
//        private String amdata;
//        private String adctrl;
//        private String enc;
//    }
//
//    @Data
//    public static class TextualDisplay {
//        @JsonProperty("_type")
//        private String type; // "TextualDisplay"
//        private List<TextSpan> textSpans;
//    }
//
//    @Data
//    public static class TextSpan {
//        @JsonProperty("_type")
//        private String type; // "TextSpan"
//        private String text;
//        private List<String> styles;
//        private Action action;
//        private String accessibilityText;
//    }
//
//    @Data
//    public static class Image {
//        @JsonProperty("_type")
//        private String type; // "Image"
//        private String title;
//        private String imageId;
//        private String imageIdType;
//        private OriginalSize originalSize;
//        private String URL;
//    }
//
//    @Data
//    public static class OriginalSize {
//        private int height;
//        private int width;
//    }
//
//    @Data
//    public static class TextualDisplayValue {
//        @JsonProperty("_type")
//        private String type; // "TextualDisplayValue"
//        private List<TextSpan> textSpans;
//        private String accessibilityText;
//        private Value value;
//        private Double discount;
//    }
//
//    @Data
//    public static class Value {
//        @JsonProperty("_type")
//        private String type; // "Amount"
//        private double value;
//        private String currency;
//    }
//
//    @Data
//    public static class ItemPropertyOrdering {
//        @JsonProperty("_type")
//        private String type;
//        private Map<String, PropertyOrdering> DEFAULT;
//    }
//
//    @Data
//    public static class PropertyOrdering {
//        private List<List<String>> subheader;
//        private List<List<String>> header;
//        private List<List<String>> primary;
//    }
//
//    @Data
//    public static class ViewportTracking {
//        private String trackableId;
//    }
//
//    @Data
//    public static class SearchMetadata {
//        private IconAndText quantitySold;
//        private TextSpan itemLocation;
//        private IconAndText sellerInfo;
//        private ListingTextSpan normalizedCondition;
//        private DefaultWatchIcon defaultWatchIconOnImage;
//        private ListingTextSpan brandName;
//        private TextWithSeparator displayAttributes;
//        private TextualDisplay formatBestOfferEnabled;
//        private ListingTextSpan sponsored;
//        private IconAndText freeReturnsNoFee;
//        private IconAndText almostGone;
//        private IconAndText smeInfo;
//    }
//
//    @Data
//    public static class IconAndText {
//        @JsonProperty("_type")
//        private String type; // "IconAndText"
//        private Icon icon;
//        private TextualDisplay text;
//    }
//
//    @Data
//    public static class Icon {
//        @JsonProperty("_type")
//        private String type; // "Icon"
//        private String name;
//    }
//
//    @Data
//    public static class ListingTextSpan {
//        @JsonProperty("_type")
//        private String type; // "listingTextSpan"
//        private String text;
//        private List<String> styles;
//        private List<String> listingStyles;
//        private String listingType;
//    }
//
//    @Data
//    public static class DefaultWatchIcon {
//        private WatchItem watch;
//        private boolean isWatching;
//        private WatchItem watching;
//    }
//
//    @Data
//    public static class WatchItem {
//        @JsonProperty("_type")
//        private String type; // "IconAndText"
//        private Icon icon;
//        private TextualDisplay text;
//        private Action action;
//    }
//
//    @Data
//    public static class TextWithSeparator {
//        @JsonProperty("_type")
//        private String type; // "TextWithSeparator"
//        private List<TextualDisplay> textualDisplays;
//        private String separator;
//    }
//
//    @Data
//    public static class TrackingInfo {
//        private String moduleInstance;
//        private String parentrq;
//        private boolean trackViews;
//        private boolean trackPerf;
//    }
//
//    @Data
//    public static class Meta {
//        private ModuleIdentification moduleIdentification;
//    }
//
//    @Data
//    public static class ModuleIdentification {
//        private String sojournerModuleId;
//    }
}